//TODO <1>
// await 一个reject的promise，就会走catch，你可以选择在async里catch，也可以选择在async函数外.then(er=>{})
// 并且后面的async(生成器+co也是一样的)代码（如果是try过的，就是try代码块里的不会再执行了，但try外面的代码依然会执行）就不会再执行了(内部实现是调用了it.throw(err←reject的reason))
/*
1
2
err: 123
*/
/*async function read(){
  console.log(1);
  await 1;
  console.log(2);
  await Promise.reject(123)
  console.log(3);
}

read().then(data=>{
  console.log(data);
},err=>{
  console.log('err:',err)
})*/




/*
1
2
e: 123
4
data: undefined
*/
/*async function read(){
  try {
    console.log(1);
    await 1;
    console.log(2);
    await Promise.reject(123)
    console.log(3);
  }catch (e) {
    console.log('e:',e);
  }
  console.log(4);
}

read().then(data=>{
  console.log('data:',data);
})*/


//TODO <2>
// throw一个error的情况也同上面情景1一样
/*
1
2
err: throw error
*/
/*async function read(){
  console.log(1);
  await 1;
  console.log(2);
  throw 'throw error'
  await Promise.reject(123)
  console.log(3);
}

read().then(data=>{
  console.log(data);
},err=>{
  console.log('err:',err)
})*/



async function read(){
  console.log(1);
  await 1;
  console.log(2);
  await new Promise(()=>{
    throw Error('hhhh')
  })
  console.log(3);
}

read().then(data=>{
  console.log(data);
},err=>{
  console.log('err:',err)
})
